home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-10-12 | 10.2 KB | 429 lines | [TEXT/PJMM] |
- unit Memory;
-
- { Pascal Interface to the Macintosh Libraries }
-
- { Copyright © Apple Computer Inc. }
- { All Rights Reserved }
-
- { Adapted for use with THINK Pascal 4.0.x by Marco Piovanelli }
-
- interface
- uses
- Types;
-
- const
- maxSize = $800000; {Max data block size is 8 megabytes}
- defaultPhysicalEntryCount = 8;
- { values returned from the GetPageState function }
- kPageInMemory = 0;
- kPageOnDisk = 1;
- kNotPaged = 2;
-
- { masks for Zone->heapType field }
- k32BitHeap = 1; { valid in all Memory Managers }
- kNewStyleHeap = 2; { true if new Heap Manager is present }
- kNewDebugHeap = 4; { true if new Heap Manager is running in debug mode on this heap }
-
- { size of a block in bytes }
-
- type
- Size = LONGINT;
-
- GrowZoneProcPtr = ProcPtr; { FUNCTION GrowZone(cbNeeded: Size): LONGINT; }
- PurgeProcPtr = ProcPtr; { PROCEDURE Purge(blockToPurge: Handle); }
- {}
- { UserFnProcPtr uses register based parameters on the 68k and cannot}
- { be written in or called from a high-level language without the help of}
- { mixed mode or assembly glue.}
- {}
- { In:}
- { => *parameter A0.L}
- { }
- UserFnProcPtr = ProcPtr; { PROCEDURE UserFn(parameter: UNIV Ptr); }
- GrowZoneUPP = UniversalProcPtr;
- PurgeUPP = UniversalProcPtr;
- UserFnUPP = UniversalProcPtr;
-
- THz = ^Zone;
-
- Zone = record
- bkLim: Ptr;
- purgePtr: Ptr;
- hFstFree: Ptr;
- zcbFree: LONGINT;
- gzProc: GrowZoneUPP;
- moreMast: INTEGER;
- flags: INTEGER;
- cntRel: INTEGER;
- maxRel: INTEGER;
- cntNRel: INTEGER;
- heapType: SInt8;
- unused: SInt8;
- cntEmpty: INTEGER;
- cntHandles: INTEGER;
- minCBFree: LONGINT;
- purgeProc: PurgeUPP;
- sparePtr: Ptr;
- allocPtr: Ptr;
- heapData: INTEGER;
- end;
- MemoryBlock = record
- address: Ptr;
- count: LONGINT;
- end;
- LogicalToPhysicalTable = record
- logical: MemoryBlock;
- physical: array[0..7] of MemoryBlock;
- end;
- PageState = INTEGER;
-
- StatusRegisterContents = INTEGER;
-
- const
- uppGrowZoneProcInfo = $000000F0; { FUNCTION (4 byte param): 4 byte result; }
- uppPurgeProcInfo = $000000C0; { PROCEDURE (4 byte param); }
- uppUserFnProcInfo = $00009802; { Register PROCEDURE (4 bytes in A0); }
-
- function NewGrowZoneProc (userRoutine: GrowZoneProcPtr): GrowZoneUPP;
- inline
- $2E9F;
-
- function NewPurgeProc (userRoutine: PurgeProcPtr): PurgeUPP;
- inline
- $2E9F;
-
- function NewUserFnProc (userRoutine: UserFnProcPtr): UserFnUPP;
- inline
- $2E9F;
-
- function CallGrowZoneProc (cbNeeded: Size;
- userRoutine: GrowZoneUPP): LONGINT;
- inline
- $205F, $4E90;
-
- procedure CallPurgeProc (blockToPurge: Handle;
- userRoutine: PurgeUPP);
- inline
- $205F, $4E90;
-
- procedure CallUserFnProc (parameter: univ Ptr;
- userRoutine: UserFnUPP);
- {To be implemented: Glue to move parameters into registers.}
- function GetApplLimit: Ptr;
- inline
- $2EB8, $0130; { MOVE.L $0130,(SP) }
-
- function SystemZone: THz;
- inline
- $2EB8, $02A6; { MOVE.L $02A6,(SP) }
-
- function ApplicationZone: THz;
- inline
- $2EB8, $02AA; { MOVE.L $02AA,(SP) }
-
- function GZSaveHnd: Handle;
- inline
- $2EB8, $0328; { MOVE.L $0328,(SP) }
-
- function TopMem: Ptr;
- inline
- $2EB8, $0108; { MOVE.L $0108,(SP) }
-
- function MemError: OSErr;
- inline
- $3EB8, $0220; { MOVE.W $0220,(SP) }
-
- function GetZone: THz;
- inline
- $A11A, $2E88;
- function NewHandle (byteCount: Size): Handle;
- inline
- $201F, $A122, $2E88;
- function NewHandleSys (byteCount: Size): Handle;
- inline
- $201F, $A522, $2E88;
- function NewHandleClear (byteCount: Size): Handle;
- inline
- $201F, $A322, $2E88;
- function NewHandleSysClear (byteCount: Size): Handle;
- inline
- $201F, $A722, $2E88;
- function HandleZone (h: Handle): THz;
- inline
- $205F, $A126, $2E88;
- function RecoverHandle (p: Ptr): Handle;
- inline
- $205F, $A128, $2E88;
- function RecoverHandleSys (p: Ptr): Handle;
- inline
- $205F, $A528, $2E88;
- function NewPtr (byteCount: Size): Ptr;
- inline
- $201F, $A11E, $2E88;
- function NewPtrSys (byteCount: Size): Ptr;
- inline
- $201F, $A51E, $2E88;
- function NewPtrClear (byteCount: Size): Ptr;
- inline
- $201F, $A31E, $2E88;
- function NewPtrSysClear (byteCount: Size): Ptr;
- inline
- $201F, $A71E, $2E88;
- function PtrZone (p: Ptr): THz;
- inline
- $205F, $A148, $2E88;
- function MaxBlock: LONGINT;
- inline
- $A061, $2E80;
- function MaxBlockSys: LONGINT;
- inline
- $A461, $2E80;
- function StackSpace: LONGINT;
- inline
- $A065, $2E80;
- function NewEmptyHandle: Handle;
- inline
- $A166, $2E88;
- function NewEmptyHandleSys: Handle;
- inline
- $A566, $2E88;
- procedure HLock (h: Handle);
- inline
- $205F, $A029;
- procedure HUnlock (h: Handle);
- inline
- $205F, $A02A;
- procedure HPurge (h: Handle);
- inline
- $205F, $A049;
- procedure HNoPurge (h: Handle);
- inline
- $205F, $A04A;
- procedure HLockHi (h: Handle);
- inline
- $205F, $A064, $A029;
- function TempNewHandle (logicalSize: Size;
- var resultCode: OSErr): Handle;
- inline
- $3F3C, $001D, $A88F;
- function TempMaxMem (var grow: Size): Size;
- inline
- $3F3C, $0015, $A88F;
- function TempFreeMem: LONGINT;
- inline
- $3F3C, $0018, $A88F;
- { Temporary Memory routines renamed, but obsolete, in System 7.0 and later. }
- procedure TempHLock (h: Handle;
- var resultCode: OSErr);
- inline
- $3F3C, $001E, $A88F;
- procedure TempHUnlock (h: Handle;
- var resultCode: OSErr);
- inline
- $3F3C, $001F, $A88F;
- procedure TempDisposeHandle (h: Handle;
- var resultCode: OSErr);
- inline
- $3F3C, $0020, $A88F;
- function TempTopMem: Ptr;
- inline
- $3F3C, $0016, $A88F;
- procedure InitApplZone;
- inline
- $A02C;
- procedure InitZone (pgrowZone: GrowZoneUPP;
- cmoreMasters: INTEGER;
- limitPtr: univ Ptr;
- startPtr: univ Ptr);
- procedure SetZone (hz: THz);
- inline
- $205F, $A01B;
- function CompactMem (cbNeeded: Size): Size;
- inline
- $201F, $A04C, $2E80;
- function CompactMemSys (cbNeeded: Size): Size;
- inline
- $201F, $A44C, $2E80;
- procedure PurgeMem (cbNeeded: Size);
- inline
- $201F, $A04D;
- procedure PurgeMemSys (cbNeeded: Size);
- inline
- $201F, $A44D;
- function FreeMem: LONGINT;
- inline
- $A01C, $2E80;
- function FreeMemSys: LONGINT;
- inline
- $A41C, $2E80;
- procedure ReserveMem (cbNeeded: Size);
- inline
- $201F, $A040;
- procedure ReserveMemSys (cbNeeded: Size);
- inline
- $201F, $A440;
- function MaxMem (var grow: Size): Size;
- inline
- $225F, $A11D, $2288, $2E80;
- function MaxMemSys (var grow: Size): Size;
- inline
- $225F, $A51D, $2288, $2E80;
- procedure SetGrowZone (growZone: GrowZoneUPP);
- inline
- $205F, $A04B;
- procedure SetApplLimit (zoneLimit: univ Ptr);
- inline
- $205F, $A02D;
- procedure MoveHHi (h: Handle);
- inline
- $205F, $A064;
- procedure DisposePtr (p: Ptr);
- inline
- $205F, $A01F;
- function GetPtrSize (p: Ptr): Size;
- procedure SetPtrSize (p: Ptr;
- newSize: Size);
- inline
- $201F, $205F, $A020;
- procedure DisposeHandle (h: Handle);
- inline
- $205F, $A023;
- procedure SetHandleSize (h: Handle;
- newSize: Size);
- inline
- $201F, $205F, $A024;
- function GetHandleSize (h: Handle): Size;
- {$IFC TRUE}
- inline
- $205F, { movea.l (sp)+, a0 }
- $A025, { _GetHandleSize }
- $2E80, { move.l d0, (sp) }
- $6A02, { bpl.s *+4 }
- $4297; { clr.l (sp) }
- {$ENDC}
- function InlineGetHandleSize (h: Handle): Size;
- inline
- $205F, $A025, $2E80;
- procedure ReallocateHandle (h: Handle;
- byteCount: Size);
- inline
- $201F, $205F, $A027;
- procedure EmptyHandle (h: Handle);
- inline
- $205F, $A02B;
- procedure HSetRBit (h: Handle);
- inline
- $205F, $A067;
- procedure HClrRBit (h: Handle);
- inline
- $205F, $A068;
- procedure MoreMasters;
- inline
- $A036;
- procedure BlockMove (srcPtr: univ Ptr;
- destPtr: univ Ptr;
- byteCount: Size);
- inline
- $201F, $225F, $205F, $A02E;
- procedure BlockMoveData (srcPtr: univ Ptr;
- destPtr: univ Ptr;
- byteCount: Size);
- inline
- $201F, $225F, $205F, $A22E;
- procedure PurgeSpace (var total: LONGINT;
- var contig: LONGINT);
- function HGetState (h: Handle): SInt8;
- inline
- $205F, $A069, $1E80;
- procedure HSetState (h: Handle;
- flags: ByteParameter);
- inline
- $101F, $205F, $A06A;
- procedure SetApplBase (startPtr: univ Ptr);
- inline
- $205F, $A057;
- procedure MaxApplZone;
- inline
- $A063;
- function HoldMemory (address: univ Ptr;
- count: LONGINT): OSErr;
- inline
- $225F, $205F, $7000, $A05C, $3E80;
- function UnholdMemory (address: univ Ptr;
- count: LONGINT): OSErr;
- inline
- $225F, $205F, $7001, $A05C, $3E80;
- function LockMemory (address: univ Ptr;
- count: LONGINT): OSErr;
- inline
- $225F, $205F, $7002, $A05C, $3E80;
- function LockMemoryContiguous (address: univ Ptr;
- count: LONGINT): OSErr;
- inline
- $225F, $205F, $7004, $A05C, $3E80;
- function UnlockMemory (address: univ Ptr;
- count: LONGINT): OSErr;
- inline
- $225F, $205F, $7003, $A05C, $3E80;
- function GetPhysical (var addresses: LogicalToPhysicalTable;
- var physicalEntryCount: LONGINT): OSErr;
- function DeferUserFn (userFunction: UserFnUPP;
- argument: univ Ptr): OSErr;
- inline
- $201F, $205F, $A08F, $3E80;
- function DebuggerGetMax: LONGINT;
- inline
- $7000, $A08D, $2E80;
- procedure DebuggerEnter;
- inline
- $7001, $A08D;
- procedure DebuggerExit;
- inline
- $7002, $A08D;
- procedure DebuggerPoll;
- inline
- $7003, $A08D;
- function GetPageState (address: univ Ptr): PageState;
- inline
- $205F, $7004, $A08D, $3E80;
- function PageFaultFatal: BOOLEAN;
- inline
- $7005, $A08D, $1E80;
- function DebuggerLockMemory (address: univ Ptr;
- count: LONGINT): OSErr;
- inline
- $225F, $205F, $7006, $A08D, $3E80;
- function DebuggerUnlockMemory (address: univ Ptr;
- count: LONGINT): OSErr;
- inline
- $225F, $205F, $7007, $A08D, $3E80;
- function EnterSupervisorMode: StatusRegisterContents;
- inline
- $7008, $A08D, $3E80;
- function StripAddress (theAddress: univ Ptr): Ptr;
- inline
- $201F, $A055, $2E80;
- function Translate24To32 (addr24: univ Ptr): Ptr;
- inline
- $201F, $A091, $2E80;
- function HandToHand (var theHndl: Handle): OSErr;
- function PtrToXHand (srcPtr: univ Ptr;
- dstHndl: Handle;
- size: LONGINT): OSErr;
- inline
- $201F, $225F, $205F, $A9E2, $3E80;
- function PtrToHand (srcPtr: univ Ptr;
- var dstHndl: Handle;
- size: LONGINT): OSErr;
- function HandAndHand (hand1: Handle;
- hand2: Handle): OSErr;
- inline
- $225F, $205F, $A9E4, $3E80;
- function PtrAndHand (ptr1: univ Ptr;
- hand2: Handle;
- size: LONGINT): OSErr;
- inline
- $201F, $225F, $205F, $A9EF, $3E80;
-
- implementation
- end.